#pragma once

class CBase;
class CHero;
class CUnit;
class CStructure;
class CResource;

enum eMsgTypes { MSG_NULL = 0,SPAWN_HERO,SPAWN_UNIT,SPAWN_UNIT_NO_HERO,SPAWN_RESOURCES,MSG_MAX };

class CMessage
{
private:
	int	m_nMsgID;

public:
	CMessage(int MsgID) { m_nMsgID = MsgID;}

	virtual ~CMessage(void) {}

	int GetMsgID(void)	{ return m_nMsgID; }
};

class SpawnHero : public CMessage
{
public:
	SpawnHero():CMessage(SPAWN_HERO) {}
};
class SpawnUnit : public CMessage
{
	CHero* m_pHero;
public:
	SpawnUnit(CHero* pHero) : CMessage(SPAWN_UNIT) {m_pHero = pHero;}
	CHero* GetHero() {return m_pHero;}
};
class SpawnUnitNoHero : public CMessage
{
public:
	SpawnUnitNoHero() : CMessage(SPAWN_UNIT_NO_HERO) {}
};
class SpawnResources : public CMessage
{
public:
	SpawnResources() : CMessage(SPAWN_RESOURCES) {}
};
